home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / LEX_&_YA / CRSREF_P / CRSREF.C
C/C++ Source or Header  |  1990-02-05  |  24KB  |  1,384 lines

  1. # include <stdio.h>
  2. # define U(x) x
  3. # define BEGIN yybgin = yysvec + 1 +
  4. # define INITIAL 0
  5. # define YYLERR yysvec
  6. # define YYSTATE (yyestate-yysvec-1)
  7. # define YYOPTIM 1
  8. # define YYLMAX 200
  9. # define ECHO fprintf(yyout, "%s",yytext)
  10. # define REJECT { nstr = yyreject(); goto yyfussy;}
  11. struct yysvf { 
  12.     struct yywork *yystoff;
  13.     struct yysvf *yyother;
  14.     int *yystops;};
  15. extern struct yysvf *yyestate;
  16. extern struct yysvf yysvec[], *yybgin;
  17.  
  18. /************************************************************************/
  19. /*                                    */
  20. /*    Source  - CrsRef.lc                        */
  21. /*    Author  - Alexander S. Colwell, Copyright (C) 1989        */
  22. /*             and                        */
  23. /*          LEX - Lexical Analysis Generator by M. E. Lesk    */
  24. /*          Computing Science Technical Report # 39 by        */
  25. /*          AT & T Bell Laboratories                */
  26. /*             and                        */
  27. /*          Computer Language, February 1987            */
  28. /*          Learning about LEX by David L. Fox            */
  29. /*                                    */
  30. /*    Purpose - This is a simple C Cross Reference to learn how the     */
  31. /*          LEX really works!                    */
  32. /*                                    */
  33. /************************************************************************/
  34.  
  35. #include    <stdio.h>        /* Standard I/O defs        */
  36. #include    <stdlib.h>        /* Standard Library defs    */
  37. #include    <ctype.h>        /* C Type definitions        */
  38. #include    <string.h>        /* String definitions        */
  39.  
  40. struct tree {                /* Binary tree structure    */
  41.    struct tree    *left,*right;        /* Link tree pointers        */
  42.    char        *symbol;        /* Identifier            */
  43.    char        *refs;            /* ASCII string containing list    */
  44.                     /* of line numbers referencing    */
  45.                     /* this identifier        */
  46.    } *tree = NULL;
  47.    
  48. # define YYNEWLINE 13
  49. extern int yyleng;
  50. extern char yytext[];
  51. extern int yymorfg;
  52. extern int yyfirsttime;
  53. extern char *yysptr, yysbuf[];
  54. extern int yytchar;
  55. extern FILE *yyin, *yyout;
  56. extern int yylineno;
  57. yylex(){
  58. int nstr; extern int yyprevious;
  59. if(yyfirsttime){yyin=stdin;yyout=stdout;yyfirsttime=0;}
  60. while((nstr = yylook()) >= 0)
  61. {yyfussy: switch(nstr){
  62. case 0:
  63. if(yywrap()) return(0); break;
  64. case 1:
  65. ;
  66. break;
  67. case 2:
  68. ;
  69. break;
  70. case 3:
  71.     ;
  72. break;
  73. case 4:
  74.     ;
  75. break;
  76. case 5:
  77.     ;
  78. break;
  79. case 6:
  80.     ;
  81. break;
  82. case 7:
  83. ;
  84. break;
  85. case 8:
  86.     ;
  87. break;
  88. case 9:
  89.     ;
  90. break;
  91. case 10:
  92.     ;
  93. break;
  94. case 11:
  95.     ;
  96. break;
  97. case 12:
  98.     ;
  99. break;
  100. case 13:
  101.     ;
  102. break;
  103. case 14:
  104.     ;
  105. break;
  106. case 15:
  107.     ;
  108. break;
  109. case 16:
  110.     ;
  111. break;
  112. case 17:
  113.     ;
  114. break;
  115. case 18:
  116.     ;
  117. break;
  118. case 19:
  119.     ;
  120. break;
  121. case 20:
  122.     ;
  123. break;
  124. case 21:
  125.     ;
  126. break;
  127. case 22:
  128.     ;
  129. break;
  130. case 23:
  131.     ;
  132. break;
  133. case 24:
  134.     ;
  135. break;
  136. case 25:
  137.     ;
  138. break;
  139. case 26:
  140.     ;
  141. break;
  142. case 27:
  143. ;
  144. break;
  145. case 28:
  146. ;
  147. break;
  148. case 29:
  149.     ;
  150. break;
  151. case 30:
  152.     ;
  153. break;
  154. case 31:
  155.     ;
  156. break;
  157. case 32:
  158. ;
  159. break;
  160. case 33:
  161. ;
  162. break;
  163. case 34:
  164. ;
  165. break;
  166. case 35:
  167. ;
  168. break;
  169. case 36:
  170. ;
  171. break;
  172. case 37:
  173. btsave(yytext,&tree);
  174. break;
  175. case 38:
  176.     ;
  177. break;
  178. case 39:
  179.     ;
  180. break;
  181. case -1:
  182. break;
  183. default:
  184. fprintf(yyout,"bad switch yylook %d\n",nstr);
  185. }} return(0); }
  186. /* end of yylex */
  187.  
  188. char    *fileName;            /* Input file name        */
  189.  
  190.                     /* Define UNIX functions    */
  191. #define    malloc(s)    (char *)(MyNewPtr((long)(s)))
  192. #define    free(p)        DisposPtr((Ptr)(p))
  193.  
  194. char    *MyNewPtr();            /* Define forward references    */
  195.  
  196. void    main()
  197.    {
  198.         Str255    filename;        /* Working file name        */
  199.  
  200.     fileName = &fileName[0];    /* Set global file name pointer    */
  201.  
  202.     printf("Enter file name:");    /* Enter file name        */
  203.     gets(fileName);            /* Get 1st file name        */
  204.  
  205.     while(TRUE) {            /* Process this file        */
  206.  
  207.        if (strlen(fileName)) {    /* Check if got non-null string    */
  208.  
  209.                  yyfirsttime = FALSE;    /* Setup I/O's            */
  210.                  yyin = fopen(fileName,"r");
  211.                  yyout = stdout;
  212.  
  213.                  yylineno = 1;        /* Reset it to first line #    */
  214.                      
  215.                  yylex();            /* OK, let's LEX it        */
  216.                      
  217.                  fclose(yyin);        /* Close input file        */
  218.                  yyin = NULL;
  219.            }
  220.               
  221.        printf("Enter file name:");    /* Enter next file name        */
  222.        gets(fileName);        /* Get nth file name        */
  223.     }       
  224.    }
  225.    
  226. /* This routine will wrap-up the LEX processing                */
  227.  
  228. yywrap() 
  229.    {
  230.                        /* Output the symbols        */
  231.       printf("C Cross Reference Listing Symbol : %s\nsymbol\tline number\n\n",
  232.                fileName);
  233.       btprint(tree);
  234.       btfree(tree);
  235.       tree = NULL;
  236.       return(1);
  237.    }
  238.    
  239. /* Routines to save and retrieve names in a binary tree, modelled after    */
  240. /* binary tree routines in Kernighan & Ritchie.                */
  241.  
  242. /* This routine prints out the tree recursively                */
  243.  
  244. btprint(t)
  245.    struct tree *t;            /* Subtree pointer        */
  246.    {
  247.       short    i,j,k;            /* Working indexes        */
  248.       char    str[9];            /* Working string        */
  249.       short    len;            /* Working symbol length    */
  250.       
  251.       if (t) {                /* Check if not end-of-subtree    */
  252.  
  253.          btprint(t->left);        /* Print left subtree        */
  254.  
  255.      len = strlen(t->symbol);
  256.          strncpy(str,t->symbol,len = (len < 8 ? len:8));
  257.          str[len] = 0;
  258.      printf("%8s",str);
  259.      str[5] = 0;
  260.      for(i = k = 0, j = strlen(t->refs) / 5; i < j; i++) {
  261.             strncpy(str,t->refs + k,5); k += 5;
  262.         printf("%s",str);
  263.         if (!(i % 10))
  264.            if (i && i + 1 != j)
  265.               printf("\n        ");
  266.      }
  267.      printf("\n");
  268.          
  269.          btprint(t->right);        /* Print right subtree        */
  270.       }
  271.    }
  272.  
  273. /* This routine will release the tree's nodes                */
  274.  
  275. btfree(t)
  276.    struct tree *t;            /* Subtree pointer        */
  277.    {
  278.       if (t) {                /* Check if not end-of-subtree    */
  279.          btfree(t->left);        /* Release left subtree        */
  280.          btfree(t->right);        /* Release right subtree    */
  281.          free(t->symbol);        /* Release the symbol pointer    */
  282.          free(t->refs);            /* Release the references    */
  283.          free(t);            /* OK, release this node    */
  284.       }
  285.    }
  286.  
  287. /* This routine recursively finds the place in the tree to install the     */
  288. /* string c.                                */
  289.  
  290. btsave(c,tree)
  291.    char     *c;            /* Identifier string pointer    */
  292.    struct tree    **tree;            /* Subtree pointer        */
  293.    {
  294.       char    *p;            /* Working string pointer    */
  295.       short    e;            /* Working string comparsion    */
  296.       
  297.       if (!*tree) {            /* Check if not end-of-subtree    */
  298.       
  299.                           /* Add new entry        */
  300.          *tree = (struct tree*)(malloc(sizeof(struct tree)));
  301.          (*tree)->left = (*tree)->right = NULL;
  302.          (*tree)->symbol = strcpy(malloc(strlen(c) + 1),c);
  303.          sprintf(((*tree)->refs = malloc(6)), "%5d",yylineno);
  304.        
  305.       }
  306.       
  307.                           /* Check if found match        */
  308.       else if (!(e = strcmp(c,(*tree)->symbol))) {
  309.          sprintf((p = malloc(strlen((*tree)->refs) + 6)),
  310.             "%s%5d",(*tree)->refs,yylineno);
  311.          free((*tree)->refs);
  312.      (*tree)->refs = p;
  313.       }
  314.       
  315.       else if (e < 0)            /* Check if belongs to left subtree*/
  316.          btsave(c,&(*tree)->left);    /* Insert it in left subtree    */
  317.       
  318.       else                /* Check if belongs to right subtree*/
  319.          btsave(c,&(*tree)->right);    /* Insert it in right subtree    */
  320.    }
  321.  
  322. /* This routine will allocate new data block and check if really got it!*/
  323.  
  324. char    *MyNewPtr(s)
  325.    long    s;                /* Size of the data block    */
  326.    {
  327.        char    *p;            /* Working data block pointer    */
  328.        
  329.        if (!(p = (char *)(NewPtr(s)))) {/* Check if fail to get it    */
  330.        
  331.           btfree(tree);        /* Release the trees        */
  332.           tree = NULL;
  333.           
  334.           printf("...Opps, out of memory\n");/* Inform user about it    */
  335.           
  336.        exit(0);            /* Oops, got a problem!!!    */
  337.        }
  338.        
  339.        return(p);            /* Return data block pointer    */
  340.    }
  341. int yyvstop[] ={
  342. 0,
  343.  
  344. 38,
  345. 0,
  346.  
  347. 39,
  348. 0,
  349.  
  350. 38,
  351. 0,
  352.  
  353. 38,
  354. 0,
  355.  
  356. 38,
  357. 0,
  358.  
  359. 38,
  360. 0,
  361.  
  362. 38,
  363. 0,
  364.  
  365. 38,
  366. 0,
  367.  
  368. 37,
  369. 38,
  370. 0,
  371.  
  372. 37,
  373. 38,
  374. 0,
  375.  
  376. 37,
  377. 38,
  378. 0,
  379.  
  380. 37,
  381. 38,
  382. 0,
  383.  
  384. 37,
  385. 38,
  386. 0,
  387.  
  388. 37,
  389. 38,
  390. 0,
  391.  
  392. 37,
  393. 38,
  394. 0,
  395.  
  396. 37,
  397. 38,
  398. 0,
  399.  
  400. 37,
  401. 38,
  402. 0,
  403.  
  404. 37,
  405. 38,
  406. 0,
  407.  
  408. 37,
  409. 38,
  410. 0,
  411.  
  412. 37,
  413. 38,
  414. 0,
  415.  
  416. 37,
  417. 38,
  418. 0,
  419.  
  420. 37,
  421. 38,
  422. 0,
  423.  
  424. 37,
  425. 38,
  426. 0,
  427.  
  428. 2,
  429. 0,
  430.  
  431. 34,
  432. 0,
  433.  
  434. 37,
  435. 0,
  436.  
  437. 37,
  438. 0,
  439.  
  440. 37,
  441. 0,
  442.  
  443. 37,
  444. 0,
  445.  
  446. 37,
  447. 0,
  448.  
  449. 37,
  450. 0,
  451.  
  452. 37,
  453. 0,
  454.  
  455. 16,
  456. 37,
  457. 0,
  458.  
  459. 37,
  460. 0,
  461.  
  462. 37,
  463. 0,
  464.  
  465. 37,
  466. 0,
  467.  
  468. 37,
  469. 0,
  470.  
  471. 37,
  472. 0,
  473.  
  474. 4,
  475. 37,
  476. 0,
  477.  
  478. 37,
  479. 0,
  480.  
  481. 37,
  482. 0,
  483.  
  484. 37,
  485. 0,
  486.  
  487. 37,
  488. 0,
  489.  
  490. 37,
  491. 0,
  492.  
  493. 37,
  494. 0,
  495.  
  496. 37,
  497. 0,
  498.  
  499. 37,
  500. 0,
  501.  
  502. 37,
  503. 0,
  504.  
  505. 37,
  506. 0,
  507.  
  508. 2,
  509. 0,
  510.  
  511. 30,
  512. 0,
  513.  
  514. 30,
  515. 0,
  516.  
  517. 35,
  518. 0,
  519.  
  520. 33,
  521. 0,
  522.  
  523. 37,
  524. 0,
  525.  
  526. 37,
  527. 0,
  528.  
  529. 37,
  530. 0,
  531.  
  532. 37,
  533. 0,
  534.  
  535. 37,
  536. 0,
  537.  
  538. 37,
  539. 0,
  540.  
  541. 37,
  542. 0,
  543.  
  544. 37,
  545. 0,
  546.  
  547. 37,
  548. 0,
  549.  
  550. 37,
  551. 0,
  552.  
  553. 14,
  554. 37,
  555. 0,
  556.  
  557. 37,
  558. 0,
  559.  
  560. 3,
  561. 37,
  562. 0,
  563.  
  564. 37,
  565. 0,
  566.  
  567. 37,
  568. 0,
  569.  
  570. 37,
  571. 0,
  572.  
  573. 37,
  574. 0,
  575.  
  576. 37,
  577. 0,
  578.  
  579. 37,
  580. 0,
  581.  
  582. 37,
  583. 0,
  584.  
  585. 37,
  586. 0,
  587.  
  588. 37,
  589. 0,
  590.  
  591. 37,
  592. 0,
  593.  
  594. 37,
  595. 0,
  596.  
  597. 37,
  598. 0,
  599.  
  600. 31,
  601. 0,
  602.  
  603. 31,
  604. 32,
  605. 0,
  606.  
  607. 36,
  608. 0,
  609.  
  610. 1,
  611. 0,
  612.  
  613. 26,
  614. 37,
  615. 0,
  616.  
  617. 37,
  618. 0,
  619.  
  620. 6,
  621. 37,
  622. 0,
  623.  
  624. 5,
  625. 37,
  626. 0,
  627.  
  628. 37,
  629. 0,
  630.  
  631. 37,
  632. 0,
  633.  
  634. 37,
  635. 0,
  636.  
  637. 13,
  638. 37,
  639. 0,
  640.  
  641. 37,
  642. 0,
  643.  
  644. 37,
  645. 0,
  646.  
  647. 24,
  648. 37,
  649. 0,
  650.  
  651. 25,
  652. 37,
  653. 0,
  654.  
  655. 37,
  656. 0,
  657.  
  658. 37,
  659. 0,
  660.  
  661. 37,
  662. 0,
  663.  
  664. 37,
  665. 0,
  666.  
  667. 37,
  668. 0,
  669.  
  670. 37,
  671. 0,
  672.  
  673. 37,
  674. 0,
  675.  
  676. 37,
  677. 0,
  678.  
  679. 37,
  680. 0,
  681.  
  682. 37,
  683. 0,
  684.  
  685. 37,
  686. 0,
  687.  
  688. 35,
  689. 36,
  690. 0,
  691.  
  692. 22,
  693. 37,
  694. 0,
  695.  
  696. 37,
  697. 0,
  698.  
  699. 37,
  700. 0,
  701.  
  702. 37,
  703. 0,
  704.  
  705. 37,
  706. 0,
  707.  
  708. 17,
  709. 37,
  710. 0,
  711.  
  712. 37,
  713. 0,
  714.  
  715. 37,
  716. 0,
  717.  
  718. 11,
  719. 37,
  720. 0,
  721.  
  722. 37,
  723. 0,
  724.  
  725. 37,
  726. 0,
  727.  
  728. 37,
  729. 0,
  730.  
  731. 37,
  732. 0,
  733.  
  734. 37,
  735. 0,
  736.  
  737. 20,
  738. 37,
  739. 0,
  740.  
  741. 37,
  742. 0,
  743.  
  744. 15,
  745. 37,
  746. 0,
  747.  
  748. 37,
  749. 0,
  750.  
  751. 37,
  752. 0,
  753.  
  754. 18,
  755. 37,
  756. 0,
  757.  
  758. 19,
  759. 37,
  760. 0,
  761.  
  762. 37,
  763. 0,
  764.  
  765. 23,
  766. 37,
  767. 0,
  768.  
  769. 12,
  770. 37,
  771. 0,
  772.  
  773. 10,
  774. 37,
  775. 0,
  776.  
  777. 8,
  778. 37,
  779. 0,
  780.  
  781. 9,
  782. 37,
  783. 0,
  784.  
  785. 37,
  786. 0,
  787.  
  788. 37,
  789. 0,
  790.  
  791. 32,
  792. 0,
  793.  
  794. 37,
  795. 0,
  796.  
  797. 21,
  798. 37,
  799. 0,
  800.  
  801. 37,
  802. 0,
  803.  
  804. 29,
  805. 37,
  806. 0,
  807.  
  808. 37,
  809. 0,
  810.  
  811. 7,
  812. 37,
  813. 0,
  814.  
  815. 28,
  816. 37,
  817. 0,
  818.  
  819. 27,
  820. 37,
  821. 0,
  822.  
  823. 32,
  824. 0,
  825. 0};
  826. # define YYTYPE int
  827. struct yywork { YYTYPE verify, advance; } yycrank[] ={
  828. 0,0,    0,0,    1,3,    0,0,    
  829. 0,0,    0,0,    0,0,    0,0,    
  830. 0,0,    0,0,    0,0,    0,0,    
  831. 0,0,    0,0,    1,4,    0,0,    
  832. 0,0,    0,0,    0,0,    0,0,    
  833. 0,0,    0,0,    0,0,    0,0,    
  834. 0,0,    0,0,    0,0,    0,0,    
  835. 0,0,    0,0,    0,0,    0,0,    
  836. 0,0,    0,0,    0,0,    1,5,    
  837. 0,0,    0,0,    0,0,    0,0,    
  838. 1,6,    0,0,    0,0,    1,3,    
  839. 1,3,    0,0,    0,0,    1,7,    
  840. 1,8,    1,9,    1,10,    1,10,    
  841. 1,10,    1,10,    1,10,    1,10,    
  842. 1,10,    1,10,    1,10,    8,32,    
  843. 0,0,    0,0,    0,0,    0,0,    
  844. 0,0,    0,0,    1,11,    0,0,    
  845. 2,6,    29,63,    1,11,    0,0,    
  846. 1,11,    0,0,    0,0,    2,7,    
  847. 26,0,    1,11,    2,10,    2,10,    
  848. 2,10,    2,10,    2,10,    2,10,    
  849. 2,10,    2,10,    2,10,    28,0,    
  850. 0,0,    1,11,    0,0,    0,0,    
  851. 0,0,    0,0,    0,0,    0,0,    
  852. 1,11,    0,0,    1,12,    1,13,    
  853. 1,14,    1,15,    1,16,    1,17,    
  854. 1,18,    14,41,    1,19,    0,0,    
  855. 28,62,    1,20,    0,0,    64,98,    
  856. 14,42,    15,44,    66,99,    1,21,    
  857. 1,22,    1,23,    1,24,    14,43,    
  858. 1,25,    5,26,    13,40,    15,45,    
  859. 16,46,    12,39,    2,12,    2,13,    
  860. 2,14,    2,15,    2,16,    2,17,    
  861. 2,18,    5,0,    2,19,    17,48,    
  862. 16,47,    2,20,    17,49,    18,50,    
  863. 20,53,    6,29,    19,51,    2,21,    
  864. 2,22,    2,23,    2,24,    21,54,    
  865. 2,25,    23,59,    19,52,    24,60,    
  866. 25,61,    6,0,    5,27,    26,28,    
  867. 39,73,    22,55,    22,56,    40,74,    
  868. 31,67,    41,75,    5,26,    5,26,    
  869. 42,76,    43,77,    28,28,    5,26,    
  870. 5,26,    22,57,    44,78,    45,79,    
  871. 22,58,    46,80,    6,29,    47,81,    
  872. 48,82,    49,83,    50,84,    52,85,    
  873. 53,86,    54,87,    6,29,    6,29,    
  874. 55,89,    5,26,    56,90,    6,29,    
  875. 6,29,    5,26,    57,91,    5,26,    
  876. 31,67,    58,93,    54,88,    59,94,    
  877. 5,26,    61,97,    62,0,    68,0,    
  878. 60,95,    73,104,    74,105,    75,106,    
  879. 76,107,    6,29,    77,108,    57,92,    
  880. 5,26,    6,29,    60,96,    6,29,    
  881. 5,28,    78,109,    69,103,    5,26,    
  882. 6,29,    7,31,    7,31,    7,31,    
  883. 7,31,    7,31,    7,31,    7,31,    
  884. 7,31,    7,31,    7,31,    79,110,    
  885. 6,29,    80,111,    81,112,    82,113,    
  886. 6,30,    68,102,    9,33,    6,29,    
  887. 9,34,    9,34,    9,34,    9,34,    
  888. 9,34,    9,34,    9,34,    9,34,    
  889. 9,34,    9,34,    69,103,    70,71,    
  890. 70,71,    70,71,    70,71,    70,71,    
  891. 70,71,    70,71,    70,71,    70,71,    
  892. 70,71,    9,35,    84,114,    86,115,    
  893. 87,116,    88,117,    89,118,    10,33,    
  894. 9,36,    10,34,    10,34,    10,34,    
  895. 10,34,    10,34,    10,34,    10,34,    
  896. 10,34,    10,34,    10,34,    90,119,    
  897. 9,37,    62,28,    91,120,    92,121,    
  898. 93,122,    94,123,    95,124,    96,125,    
  899. 97,126,    99,127,    10,35,    105,130,    
  900. 108,131,    9,35,    109,132,    110,133,    
  901. 35,70,    10,36,    35,70,    112,134,    
  902. 9,36,    35,71,    35,71,    35,71,    
  903. 35,71,    35,71,    35,71,    35,71,    
  904. 35,71,    35,71,    35,71,    113,135,    
  905. 9,37,    116,136,    117,137,    118,138,    
  906. 119,139,    120,140,    121,141,    122,142,    
  907. 123,143,    124,144,    10,35,    125,145,    
  908. 126,146,    131,148,    132,149,    133,150,    
  909. 134,151,    10,36,    11,38,    11,38,    
  910. 11,38,    11,38,    11,38,    11,38,    
  911. 11,38,    11,38,    11,38,    11,38,    
  912. 136,152,    137,153,    139,154,    140,155,    
  913. 141,156,    142,157,    143,158,    11,38,    
  914. 11,38,    11,38,    11,38,    11,38,    
  915. 11,38,    11,38,    11,38,    11,38,    
  916. 11,38,    11,38,    11,38,    11,38,    
  917. 11,38,    11,38,    11,38,    11,38,    
  918. 11,38,    11,38,    11,38,    11,38,    
  919. 11,38,    11,38,    11,38,    11,38,    
  920. 11,38,    145,159,    147,160,    148,161,    
  921. 149,162,    152,163,    158,164,    11,38,    
  922. 11,38,    11,38,    11,38,    11,38,    
  923. 11,38,    11,38,    11,38,    11,38,    
  924. 11,38,    11,38,    11,38,    11,38,    
  925. 11,38,    11,38,    11,38,    11,38,    
  926. 11,38,    11,38,    11,38,    11,38,    
  927. 11,38,    11,38,    11,38,    11,38,    
  928. 11,38,    30,64,    159,165,    160,166,    
  929. 32,32,    161,167,    163,168,    165,169,    
  930. 170,171,    0,0,    0,0,    0,0,    
  931. 0,0,    30,0,    0,0,    0,0,    
  932. 32,0,    33,69,    33,69,    33,69,    
  933. 33,69,    33,69,    33,69,    33,69,    
  934. 33,69,    33,69,    33,69,    0,0,    
  935. 0,0,    0,0,    0,0,    0,0,    
  936. 0,0,    0,0,    30,64,    0,0,    
  937. 0,0,    32,32,    33,35,    30,65,    
  938. 0,0,    0,0,    30,64,    30,64,    
  939. 0,0,    32,68,    32,32,    30,64,    
  940. 30,66,    0,0,    32,32,    32,32,    
  941. 100,101,    100,101,    100,101,    100,101,    
  942. 100,101,    100,101,    100,101,    100,101,    
  943. 100,101,    100,101,    0,0,    0,0,    
  944. 0,0,    30,64,    0,0,    0,0,    
  945. 32,32,    30,64,    33,35,    30,64,    
  946. 32,32,    0,0,    32,32,    0,0,    
  947. 30,64,    0,0,    0,0,    32,32,    
  948. 0,0,    0,0,    0,0,    0,0,    
  949. 0,0,    0,0,    0,0,    0,0,    
  950. 30,64,    0,0,    0,0,    32,32,    
  951. 0,0,    0,0,    0,0,    30,64,    
  952. 0,0,    0,0,    32,32,    37,72,    
  953. 37,72,    37,72,    37,72,    37,72,    
  954. 37,72,    37,72,    37,72,    37,72,    
  955. 37,72,    0,0,    0,0,    0,0,    
  956. 0,0,    0,0,    0,0,    0,0,    
  957. 37,72,    37,72,    37,72,    37,72,    
  958. 37,72,    37,72,    67,100,    0,0,    
  959. 67,100,    0,0,    0,0,    67,101,    
  960. 67,101,    67,101,    67,101,    67,101,    
  961. 67,101,    67,101,    67,101,    67,101,    
  962. 67,101,    127,147,    127,147,    127,147,    
  963. 127,147,    127,147,    127,147,    127,147,    
  964. 127,147,    127,147,    127,147,    0,0,    
  965. 37,72,    37,72,    37,72,    37,72,    
  966. 37,72,    37,72,    103,128,    0,0,    
  967. 103,128,    0,0,    0,0,    103,129,    
  968. 103,129,    103,129,    103,129,    103,129,    
  969. 103,129,    103,129,    103,129,    103,129,    
  970. 103,129,    128,129,    128,129,    128,129,    
  971. 128,129,    128,129,    128,129,    128,129,    
  972. 128,129,    128,129,    128,129,    166,170,    
  973. 166,170,    166,170,    166,170,    166,170,    
  974. 166,170,    166,170,    166,170,    166,170,    
  975. 166,170,    0,0,    0,0,    0,0,    
  976. 0,0};
  977. struct yysvf yysvec[] ={
  978. 0,    0,    0,
  979. yycrank+-1,    0,        0,    
  980. yycrank+-29,    yysvec+1,    0,    
  981. yycrank+0,    0,        yyvstop+1,
  982. yycrank+0,    0,        yyvstop+3,
  983. yycrank+-120,    0,        yyvstop+5,
  984. yycrank+-140,    0,        yyvstop+7,
  985. yycrank+169,    0,        yyvstop+9,
  986. yycrank+17,    0,        yyvstop+11,
  987. yycrank+188,    0,        yyvstop+13,
  988. yycrank+217,    0,        yyvstop+15,
  989. yycrank+278,    0,        yyvstop+17,
  990. yycrank+8,    yysvec+11,    yyvstop+20,
  991. yycrank+8,    yysvec+11,    yyvstop+23,
  992. yycrank+8,    yysvec+11,    yyvstop+26,
  993. yycrank+12,    yysvec+11,    yyvstop+29,
  994. yycrank+16,    yysvec+11,    yyvstop+32,
  995. yycrank+27,    yysvec+11,    yyvstop+35,
  996. yycrank+28,    yysvec+11,    yyvstop+38,
  997. yycrank+40,    yysvec+11,    yyvstop+41,
  998. yycrank+29,    yysvec+11,    yyvstop+44,
  999. yycrank+46,    yysvec+11,    yyvstop+47,
  1000. yycrank+53,    yysvec+11,    yyvstop+50,
  1001. yycrank+28,    yysvec+11,    yyvstop+53,
  1002. yycrank+41,    yysvec+11,    yyvstop+56,
  1003. yycrank+48,    yysvec+11,    yyvstop+59,
  1004. yycrank+-63,    yysvec+5,    0,    
  1005. yycrank+0,    0,        yyvstop+62,
  1006. yycrank+-74,    yysvec+5,    0,    
  1007. yycrank+30,    0,        0,    
  1008. yycrank+-400,    0,        0,    
  1009. yycrank+91,    yysvec+7,    0,    
  1010. yycrank+-403,    0,        0,    
  1011. yycrank+369,    0,        0,    
  1012. yycrank+0,    yysvec+10,    0,    
  1013. yycrank+249,    0,        0,    
  1014. yycrank+0,    0,        yyvstop+64,
  1015. yycrank+451,    0,        0,    
  1016. yycrank+0,    yysvec+11,    yyvstop+66,
  1017. yycrank+40,    yysvec+11,    yyvstop+68,
  1018. yycrank+58,    yysvec+11,    yyvstop+70,
  1019. yycrank+46,    yysvec+11,    yyvstop+72,
  1020. yycrank+67,    yysvec+11,    yyvstop+74,
  1021. yycrank+55,    yysvec+11,    yyvstop+76,
  1022. yycrank+68,    yysvec+11,    yyvstop+78,
  1023. yycrank+54,    yysvec+11,    yyvstop+80,
  1024. yycrank+58,    yysvec+11,    yyvstop+83,
  1025. yycrank+59,    yysvec+11,    yyvstop+85,
  1026. yycrank+65,    yysvec+11,    yyvstop+87,
  1027. yycrank+63,    yysvec+11,    yyvstop+89,
  1028. yycrank+62,    yysvec+11,    yyvstop+91,
  1029. yycrank+0,    yysvec+11,    yyvstop+93,
  1030. yycrank+63,    yysvec+11,    yyvstop+96,
  1031. yycrank+70,    yysvec+11,    yyvstop+98,
  1032. yycrank+78,    yysvec+11,    yyvstop+100,
  1033. yycrank+73,    yysvec+11,    yyvstop+102,
  1034. yycrank+64,    yysvec+11,    yyvstop+104,
  1035. yycrank+93,    yysvec+11,    yyvstop+106,
  1036. yycrank+88,    yysvec+11,    yyvstop+108,
  1037. yycrank+83,    yysvec+11,    yyvstop+110,
  1038. yycrank+95,    yysvec+11,    yyvstop+112,
  1039. yycrank+92,    yysvec+11,    yyvstop+114,
  1040. yycrank+-185,    yysvec+5,    yyvstop+116,
  1041. yycrank+0,    0,        yyvstop+118,
  1042. yycrank+72,    0,        0,    
  1043. yycrank+0,    yysvec+64,    yyvstop+120,
  1044. yycrank+75,    0,        0,    
  1045. yycrank+479,    0,        0,    
  1046. yycrank+-186,    yysvec+32,    0,    
  1047. yycrank+145,    yysvec+33,    0,    
  1048. yycrank+199,    0,        0,    
  1049. yycrank+0,    yysvec+70,    yyvstop+122,
  1050. yycrank+0,    yysvec+37,    yyvstop+124,
  1051. yycrank+90,    yysvec+11,    yyvstop+126,
  1052. yycrank+105,    yysvec+11,    yyvstop+128,
  1053. yycrank+102,    yysvec+11,    yyvstop+130,
  1054. yycrank+90,    yysvec+11,    yyvstop+132,
  1055. yycrank+90,    yysvec+11,    yyvstop+134,
  1056. yycrank+116,    yysvec+11,    yyvstop+136,
  1057. yycrank+129,    yysvec+11,    yyvstop+138,
  1058. yycrank+128,    yysvec+11,    yyvstop+140,
  1059. yycrank+129,    yysvec+11,    yyvstop+142,
  1060. yycrank+134,    yysvec+11,    yyvstop+144,
  1061. yycrank+0,    yysvec+11,    yyvstop+146,
  1062. yycrank+147,    yysvec+11,    yyvstop+149,
  1063. yycrank+0,    yysvec+11,    yyvstop+151,
  1064. yycrank+156,    yysvec+11,    yyvstop+154,
  1065. yycrank+155,    yysvec+11,    yyvstop+156,
  1066. yycrank+144,    yysvec+11,    yyvstop+158,
  1067. yycrank+148,    yysvec+11,    yyvstop+160,
  1068. yycrank+174,    yysvec+11,    yyvstop+162,
  1069. yycrank+162,    yysvec+11,    yyvstop+164,
  1070. yycrank+162,    yysvec+11,    yyvstop+166,
  1071. yycrank+164,    yysvec+11,    yyvstop+168,
  1072. yycrank+180,    yysvec+11,    yyvstop+170,
  1073. yycrank+171,    yysvec+11,    yyvstop+172,
  1074. yycrank+178,    yysvec+11,    yyvstop+174,
  1075. yycrank+176,    yysvec+11,    yyvstop+176,
  1076. yycrank+0,    0,        yyvstop+178,
  1077. yycrank+193,    0,        yyvstop+180,
  1078. yycrank+404,    0,        0,    
  1079. yycrank+0,    yysvec+100,    yyvstop+183,
  1080. yycrank+0,    0,        yyvstop+185,
  1081. yycrank+511,    0,        0,    
  1082. yycrank+0,    yysvec+11,    yyvstop+187,
  1083. yycrank+180,    yysvec+11,    yyvstop+190,
  1084. yycrank+0,    yysvec+11,    yyvstop+192,
  1085. yycrank+0,    yysvec+11,    yyvstop+195,
  1086. yycrank+183,    yysvec+11,    yyvstop+198,
  1087. yycrank+173,    yysvec+11,    yyvstop+200,
  1088. yycrank+183,    yysvec+11,    yyvstop+202,
  1089. yycrank+0,    yysvec+11,    yyvstop+204,
  1090. yycrank+181,    yysvec+11,    yyvstop+207,
  1091. yycrank+191,    yysvec+11,    yyvstop+209,
  1092. yycrank+0,    yysvec+11,    yyvstop+211,
  1093. yycrank+0,    yysvec+11,    yyvstop+214,
  1094. yycrank+194,    yysvec+11,    yyvstop+217,
  1095. yycrank+196,    yysvec+11,    yyvstop+219,
  1096. yycrank+195,    yysvec+11,    yyvstop+221,
  1097. yycrank+201,    yysvec+11,    yyvstop+223,
  1098. yycrank+208,    yysvec+11,    yyvstop+225,
  1099. yycrank+215,    yysvec+11,    yyvstop+227,
  1100. yycrank+216,    yysvec+11,    yyvstop+229,
  1101. yycrank+216,    yysvec+11,    yyvstop+231,
  1102. yycrank+207,    yysvec+11,    yyvstop+233,
  1103. yycrank+216,    yysvec+11,    yyvstop+235,
  1104. yycrank+219,    yysvec+11,    yyvstop+237,
  1105. yycrank+489,    0,        0,    
  1106. yycrank+521,    0,        0,    
  1107. yycrank+0,    yysvec+128,    yyvstop+239,
  1108. yycrank+0,    yysvec+11,    yyvstop+242,
  1109. yycrank+211,    yysvec+11,    yyvstop+245,
  1110. yycrank+214,    yysvec+11,    yyvstop+247,
  1111. yycrank+222,    yysvec+11,    yyvstop+249,
  1112. yycrank+214,    yysvec+11,    yyvstop+251,
  1113. yycrank+0,    yysvec+11,    yyvstop+253,
  1114. yycrank+220,    yysvec+11,    yyvstop+256,
  1115. yycrank+227,    yysvec+11,    yyvstop+258,
  1116. yycrank+0,    yysvec+11,    yyvstop+260,
  1117. yycrank+236,    yysvec+11,    yyvstop+263,
  1118. yycrank+240,    yysvec+11,    yyvstop+265,
  1119. yycrank+224,    yysvec+11,    yyvstop+267,
  1120. yycrank+237,    yysvec+11,    yyvstop+269,
  1121. yycrank+241,    yysvec+11,    yyvstop+271,
  1122. yycrank+0,    yysvec+11,    yyvstop+273,
  1123. yycrank+259,    yysvec+11,    yyvstop+276,
  1124. yycrank+0,    yysvec+11,    yyvstop+278,
  1125. yycrank+331,    0,        0,    
  1126. yycrank+254,    yysvec+11,    yyvstop+281,
  1127. yycrank+256,    yysvec+11,    yyvstop+283,
  1128. yycrank+0,    yysvec+11,    yyvstop+285,
  1129. yycrank+0,    yysvec+11,    yyvstop+288,
  1130. yycrank+272,    yysvec+11,    yyvstop+291,
  1131. yycrank+0,    yysvec+11,    yyvstop+293,
  1132. yycrank+0,    yysvec+11,    yyvstop+296,
  1133. yycrank+0,    yysvec+11,    yyvstop+299,
  1134. yycrank+0,    yysvec+11,    yyvstop+302,
  1135. yycrank+0,    yysvec+11,    yyvstop+305,
  1136. yycrank+272,    yysvec+11,    yyvstop+308,
  1137. yycrank+301,    yysvec+11,    yyvstop+310,
  1138. yycrank+311,    0,        yyvstop+312,
  1139. yycrank+304,    yysvec+11,    yyvstop+314,
  1140. yycrank+0,    yysvec+11,    yyvstop+316,
  1141. yycrank+292,    yysvec+11,    yyvstop+319,
  1142. yycrank+0,    yysvec+11,    yyvstop+321,
  1143. yycrank+307,    yysvec+11,    yyvstop+324,
  1144. yycrank+531,    0,        0,    
  1145. yycrank+0,    yysvec+11,    yyvstop+326,
  1146. yycrank+0,    yysvec+11,    yyvstop+329,
  1147. yycrank+0,    yysvec+11,    yyvstop+332,
  1148. yycrank+369,    0,        0,    
  1149. yycrank+0,    0,        yyvstop+335,
  1150. 0,    0,    0};
  1151. struct yywork *yytop = yycrank+588;
  1152. struct yysvf *yybgin = yysvec+1;
  1153. char yymatch[] ={
  1154. 00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  1155. 01  ,01  ,01  ,01  ,01  ,015 ,01  ,01  ,
  1156. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  1157. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  1158. 01  ,01  ,'"' ,01  ,01  ,01  ,01  ,01  ,
  1159. 01  ,01  ,'*' ,'+' ,01  ,'+' ,01  ,'/' ,
  1160. '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
  1161. '0' ,'0' ,01  ,01  ,01  ,01  ,01  ,01  ,
  1162. 01  ,'A' ,'A' ,'A' ,'A' ,'E' ,'A' ,'G' ,
  1163. 'G' ,'G' ,'G' ,'G' ,'L' ,'G' ,'G' ,'G' ,
  1164. 'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,
  1165. 'X' ,'G' ,'G' ,01  ,01  ,01  ,01  ,'_' ,
  1166. 01  ,'A' ,'A' ,'A' ,'A' ,'E' ,'A' ,'G' ,
  1167. 'G' ,'G' ,'G' ,'G' ,'L' ,'G' ,'G' ,'G' ,
  1168. 'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,
  1169. 'X' ,'G' ,'G' ,01  ,01  ,01  ,01  ,01  ,
  1170. 0};
  1171. char yyextra[] ={
  1172. 0,0,0,0,0,0,0,0,
  1173. 0,0,0,0,0,0,0,0,
  1174. 0,0,0,0,0,0,0,0,
  1175. 0,0,0,0,0,0,0,0,
  1176. 0,0,0,0,0,0,0,0,
  1177. 0};
  1178.  
  1179. #define YYU(x) x
  1180. #define NLSTATE yyprevious=YYNEWLINE
  1181. int     yytchar;
  1182. int     yyleng; 
  1183. char     yytext[YYLMAX];
  1184. char     yysbuf[YYLMAX];
  1185. char     *yysptr = yysbuf;
  1186. int     yylineno = 1;
  1187. int     *yyfnd;
  1188. int     yyprevious = YYNEWLINE;
  1189. int     yymorfg;
  1190. int     yyfirsttime = 1;
  1191. FILE     *yyin, *yyout;
  1192. struct yysvf *yyestate, *yylstate [YYLMAX], **yylsp, **yyolsp;
  1193.  
  1194. # ifdef LEXDEBUG
  1195. int lexdebug = 0;
  1196. # endif
  1197.  
  1198. #ifndef output
  1199. int output(c) char c;
  1200. { return(putc(c,yyout)); }
  1201. #endif
  1202.  
  1203. #ifndef input
  1204. int input() 
  1205.    
  1206.    {
  1207.       if (yysptr>yysbuf) yytchar=U(*--yysptr);
  1208.       else yytchar=getc(yyin);
  1209.       
  1210.       if (yytchar=='\n') yylineno++;
  1211.      
  1212.       if (yytchar==EOF) yytchar=0; 
  1213.      
  1214.       return(yytchar);
  1215.       
  1216.    }
  1217. #endif
  1218.  
  1219. #ifndef unput
  1220. int unput(c) char c;
  1221. { yytchar= (c); if(yytchar=='\n') yylineno--; *yysptr++=yytchar; }
  1222. #endif
  1223.  
  1224. int yymore()
  1225.  
  1226.    {
  1227.    
  1228.       return(yymorfg=1);
  1229.       
  1230.    }
  1231.  
  1232. yylook(){
  1233.     register struct yysvf *yystate, **lsp;
  1234.     register struct yywork *yyt;
  1235.     struct yysvf *yyz;
  1236.     int yych;
  1237.     struct yywork *yyr;
  1238.     char *yylastch;
  1239.  
  1240.     /* start off machines */
  1241.     if (!yymorfg)
  1242.         yylastch = yytext;
  1243.     else {
  1244.         yymorfg=0;
  1245.         yylastch = yytext+yyleng;
  1246.         }
  1247.     for(;;){
  1248.         lsp = yylstate;
  1249.         yyestate = yystate = yybgin;
  1250.         if (yyprevious==YYNEWLINE) yystate++;
  1251.         for (;;){
  1252. # ifdef LEXDEBUG
  1253.             if(lexdebug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
  1254. # endif
  1255.             yyt = yystate->yystoff;
  1256.             if(yyt == yycrank){        /* may not be any transitions */
  1257.                 yyz = yystate->yyother;
  1258.                 if(yyz == 0)break;
  1259.                 if(yyz->yystoff == yycrank)break;
  1260.                 }
  1261.             *yylastch++ = yych = input();
  1262.         tryagain:
  1263. # ifdef LEXDEBUG
  1264.             if(lexdebug){
  1265.                 fprintf(yyout,"char ");
  1266.                 allprint(yych);
  1267.                 putchar('\n');
  1268.                 }
  1269. # endif
  1270.             yyr = yyt;
  1271.             if ( (int)yyt > (int)yycrank){
  1272.                 yyt = yyr + yych;
  1273.                 if (yyt <= yytop && yyt->verify+yysvec == yystate){
  1274.                     if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  1275.                         {unput(*--yylastch);break;}
  1276.                     *lsp++ = yystate = yyt->advance+yysvec;
  1277.                     goto contin;
  1278.                     }
  1279.                 }
  1280. # ifdef YYOPTIM
  1281.             else if((int)yyt < (int)yycrank) {        /* r < yycrank */
  1282.                 yyt = yyr = yycrank+(yycrank-yyt);
  1283. # ifdef LEXDEBUG
  1284.                 if(lexdebug)fprintf(yyout,"compressed state\n");
  1285. # endif
  1286.                 yyt = yyt + yych;
  1287.                 if(yyt <= yytop && yyt->verify+yysvec == yystate){
  1288.                     if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  1289.                         {unput(*--yylastch);break;}
  1290.                     *lsp++ = yystate = yyt->advance+yysvec;
  1291.                     goto contin;
  1292.                     }
  1293.                 yyt = yyr + YYU(yymatch[yych]);
  1294. # ifdef LEXDEBUG
  1295.                 if(lexdebug){
  1296.                     fprintf(yyout,"try fall back character ");
  1297.                     allprint(YYU(yymatch[yych]));
  1298.                     putchar('\n');
  1299.                     }
  1300. # endif
  1301.                 if(yyt <= yytop && yyt->verify+yysvec == yystate){
  1302.                     if(yyt->advance+yysvec == YYLERR)    /* error transition */
  1303.                         {unput(*--yylastch);break;}
  1304.                     *lsp++ = yystate = yyt->advance+yysvec;
  1305.                     goto contin;
  1306.                     }
  1307.                 }
  1308.             if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
  1309. # ifdef LEXDEBUG
  1310.                 if(lexdebug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
  1311. # endif
  1312.                 goto tryagain;
  1313.                 }
  1314. # endif
  1315.             else
  1316.                 {unput(*--yylastch);break;}
  1317.         contin:
  1318. # ifdef LEXDEBUG
  1319.             if(lexdebug){
  1320.                 fprintf(yyout,"state %d char ",yystate-yysvec-1);
  1321.                 allprint(yych);
  1322.                 putchar('\n');
  1323.                 }
  1324. # endif
  1325.             ;
  1326.             }
  1327. # ifdef LEXDEBUG
  1328.         if(lexdebug){
  1329.             fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
  1330.             allprint(yych);
  1331.             putchar('\n');
  1332.             }
  1333. # endif
  1334.         while (lsp-- > yylstate){
  1335.             *yylastch-- = 0;
  1336.             if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
  1337.                 yyolsp = lsp;
  1338.                 if(yyextra[*yyfnd]){        /* must backup */
  1339.                     while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
  1340.                         lsp--;
  1341.                         unput(*yylastch--);
  1342.                         }
  1343.                     }
  1344.                 yyprevious = YYU(*yylastch);
  1345.                 yylsp = lsp;
  1346.                 yyleng = yylastch-yytext+1;
  1347.                 yytext[yyleng] = 0;
  1348. # ifdef LEXDEBUG
  1349.                 if(lexdebug){
  1350.                     fprintf(yyout,"\nmatch ");
  1351.                     sprint(yytext);
  1352.                     fprintf(yyout," action %d\n",*yyfnd);
  1353.                     }
  1354. # endif
  1355.                 return(*yyfnd++);
  1356.                 }
  1357.             unput(*yylastch);
  1358.             }
  1359.         if (yytext[0] == 0 /* && feof(yyin) */)
  1360.             {
  1361.             yysptr=yysbuf;
  1362.             return(0);
  1363.             }
  1364.         yyprevious = yytext[0] = input();
  1365.         if (yyprevious>0)
  1366.             output(yyprevious);
  1367.         yylastch=yytext;
  1368. # ifdef LEXDEBUG
  1369.         if(lexdebug)putchar('\n');
  1370. # endif
  1371.         }
  1372.     }
  1373. yyback(p, m)
  1374.     int *p;
  1375. {
  1376. if (p==0) return(0);
  1377. while (*p)
  1378.     {
  1379.     if (*p++ == m)
  1380.         return(1);
  1381.     }
  1382. return(0);
  1383. }
  1384.